home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch6m < prev    next >
Encoding:
Internet Message Format  |  1989-11-27  |  61.3 KB

  1. Path: uunet!zephyr.ens.tek.com!tekgen!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v08i066:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch6m
  5. Message-ID: <4855@tekred.CNA.TEK.COM>
  6. Date: 22 Nov 89 19:55:41 GMT
  7. Sender: nobody@tekred.CNA.TEK.COM
  8. Lines: 1223
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 8, Issue 66
  13. Archive-name: NetHack3/Patch6m
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 13 (of 15)."
  25. # Contents:  Install.dos src/monst.c2
  26. # Wrapped by billr@saab on Wed Nov 22 10:50:20 1989
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'Install.dos' -a "${1}" != "-c" ; then 
  29.   echo shar: clobbering existing file \"'Install.dos'\"
  30. fi
  31. echo shar: Extracting \"'Install.dos'\" \(13554 characters\)
  32. sed "s/^X//" >'Install.dos' <<'END_OF_FILE'
  33. X    Instructions for compiling and installing NetHack 3.0
  34. X           on an MS-DOS, TOS, or OS/2 system
  35. X    =====================================================
  36. X        (or, How to make PC, ST, and OS/2 NetHack 3.0)
  37. X              Last revision: 19 Nov 1989
  38. X
  39. X1.  Make sure all the NetHack files are in the appropriate directory structure.
  40. X    You should have a main directory with subdirectories src, include, auxil,
  41. X    others, amiga, mac, and vms.  If you do not follow this structure, the
  42. X    Makefile will not function properly.
  43. X
  44. X    All the shared and UNIX-specific .c files and the source Makefile belong
  45. X    in src; all the PC .c files and make files belong in others; all the .h
  46. X    files belong in include; other assorted files belong in auxil.  We will
  47. X    not need any of the files from the amiga, mac, and vms directories.
  48. X
  49. X    If you downloaded or ftp'd the sources from a UNIX system, the lines
  50. X    will probably end in UNIX-style newlines, instead of the carriage
  51. X    return and line feed pairs used by DOS and OS/2.  Turbo C 2.0 in
  52. X    particular dislikes these; you'll have to convert them (with a utility
  53. X    like Rahul Dhesi's "flip").  Also, every file should end with an empty
  54. X    line, because both Microsoft C and MASM have a habit of ignoring the
  55. X    last line of each file.
  56. X
  57. X2.  Move all the .c files from the others directory to your src directory.
  58. X    You will definitely need pc*.c and msdos.c.
  59. X
  60. X    random.c is only needed if you want the high-quality random number
  61. X    generation routines.  The trampoli.c and ovlmgr.asm files are needed
  62. X    for the MS-DOS overlays.  ovlmgr.obj should remain in others
  63. X    (the makefile copies it when it's needed).  You can comment out the
  64. X    #define RANDOM line in pcconf.h or tosconf.h to disable the random
  65. X    number routines. Similarly, commenting out the #define OVERLAY in
  66. X    pcconf.h disables the overlay code.  We'll get to pcconf.h/tosconf.h
  67. X    in step 4.
  68. X
  69. X    oldtos.c is an old Atari ST version of msdos.c.  If you're using
  70. X    a compiler other than GCC, you may need to #define OLD_TOS in
  71. X    tosconf.h and edit your make file to use this.
  72. X
  73. X    Run a uudecode utility on termcap.uu (Fred Fish's termcap library) and
  74. X    ovlmgr.uu (MS-DOS overlay manager), to generate the files termcap.arc
  75. X    and ovlmgr.obj.  Move these into your src directory, too.  Unarc
  76. X    termcap.arc.
  77. X
  78. X    termcap.arc contains termcap routines.  Using them involves some
  79. X    knowledge of the UNIX concept of a termcap database and setting
  80. X    the TERM environment variable.  Commenting out the #define TERMLIB
  81. X    in pcconf.h/tosconf.h to disable this feature (relying on the
  82. X    ANSI_DEFAULT feature) will make your job quite a bit easier.
  83. X
  84. X    ovlmgr.obj is used with the OVERLAY code, as above.
  85. X
  86. X3.  Now look at Makefile.* in your others directory.  Consult the list below
  87. X    and pick out the make file most appropriate to your system.  Rename this
  88. X    file to "Makefile" (no extension), and move it into your src directory.
  89. X
  90. X    DOS:
  91. X    Microsoft C 5.1     Makefile.ovl    Make.ini
  92. X    Microsoft C 4.0        Makefile.pc    (not available)
  93. X    Turbo C 2.0        Makefile.tcc    Maketcc.ini
  94. X    OS/2:
  95. X    Microsoft C 5.1        Makefile.os2    Make.ini
  96. X    TOS:
  97. X    GCC 1.34        Makefile.st
  98. X
  99. X    If an .ini file is also listed, move that init file to your src directory
  100. X    too, renaming it to "Make.ini" if necessary.  If you like, you may also
  101. X    place Make.ini in any directory listed in your PATH environment variable.
  102. X
  103. X    The PC NetHack make files are set up for NDMAKE, a public domain
  104. X    "make" utility.  Both Microsoft's and Borland's "make" leave much to
  105. X    be desired.  Neither can handle the complexity of the make file's link
  106. X    command.  It is worth the extra effort to get NDMAKE if you don't
  107. X    already have it.  If you must use Microsoft's or Borland's "make", you
  108. X    will have to edit and/or merge the make and the make init files into a
  109. X    form your make can use.
  110. X
  111. X    If you're using a different compiler, you will have to adapt one of
  112. X    the make files (and make init file, if appropriate) to your needs.  In
  113. X    particular, change the CC and CFLAGS macros to your C compiler's file
  114. X    name and the parameters to pass to it.
  115. X
  116. X        Makefile.top in the top directory and Makefile.aux(il) in the
  117. X        auxil directory are for UNIX NetHack.  You may delete them.
  118. X
  119. X4.  Go to the include subdirectory and edit config.h according to the comments
  120. X    to match your system and desired set of features.  Also edit pcconf.h for
  121. X    PC or OS/2 NetHack, or tosconf.h for ST NetHack.
  122. X
  123. X    If you're using an Atari ST and some compiler other than GCC, you may
  124. X    possibly want to #define OLD_TOS and use oldtos.c instead of msdos.c.
  125. X    This is *not* guaranteed to work, so be prepared to make some changes.
  126. X
  127. X    ST and OS/2 NetHackers can skip to the next section, since the entire game
  128. X    will fit in less than one megabyte.  (Unfortunately, nothing you do is
  129. X    likely to make NH3.0 work on a 520ST.)
  130. X
  131. X    PC NetHackers:
  132. X
  133. X    To compile under MS-DOS, you must either produce an overlaid executable or
  134. X    make some very difficult decisions about which features to include.
  135. X
  136. X    The base size of a PC NetHack executable, with no extra features or
  137. X    overlays, will be around 520 kilobytes.  Anything over 590K is likely not
  138. X    to work.  Here's an incomplete and outdated list of the approximate costs
  139. X    of various additional features in terms of executable size, using
  140. X    Microsoft C:
  141. X
  142. X    WIZARD            3K
  143. X    LOGFILE
  144. X    NEWS
  145. X    COMPRESS        2K
  146. X    ZEROCOMP
  147. X    CHDIR
  148. X
  149. X    POLYSELF       31K
  150. X    THEOLOGY       11K
  151. X    SOUNDS            6K
  152. X    KICK
  153. X
  154. X    THRONES         3K
  155. X    FOUNTAINS        2K
  156. X    SINKS            5K
  157. X    ALTARS            4K
  158. X
  159. X    WALLIFIED_MAZE        1K
  160. X    REINCARNATION        7K
  161. X    STRONGHOLD       13K
  162. X
  163. X    ORACLE
  164. X    MEDUSA
  165. X    KOPS
  166. X    ARMY            1K
  167. X    WORM
  168. X    GOLEMS            2K
  169. X    INFERNO
  170. X    SEDUCE
  171. X    TOLKIEN
  172. X    PROBING         1K
  173. X    WALKIES         4K
  174. X    SHIRT
  175. X    MUSIC            6K
  176. X    TUTTI_FRUTTI
  177. X    SPELLS           10K
  178. X    NAMED_ITEMS
  179. X
  180. X    ELBERETH        3K
  181. X    EXPLORE_MODE        2K
  182. X    HARD
  183. X
  184. X    REDO            1K
  185. X    COM_COMPL        1K
  186. X    CLIPPING
  187. X
  188. X    OVERLAY
  189. X    DGK            7K
  190. X    TERMLIB
  191. X    RANDOM            1K
  192. X    SHELL
  193. X    TEXTCOLOR        1K
  194. X
  195. X    Using Microsoft C and overlays, we've managed to enable everything.
  196. X    Unfortunately, the overlay manager doesn't work with Turbo C.  Using
  197. X    Turbo C, we eked by with just WIZARD, ZEROCOMP, BITFIELDS, ELBERETH,
  198. X    HARD, REDO, DGK and TEXTCOLOR.  There's very little leeway for nifty
  199. X    features without an overlay manager.
  200. X
  201. X5.  If you're using a compiler not in the list in step 3, you may want to look
  202. X    through system.h, in the include directory.  This file matches the return
  203. X    and parameter types for system calls and library routines with various
  204. X    flavors of compilers and operating systems.  Leaving this file alone is
  205. X    unlikely to cause problems, but if you get compile errors with any
  206. X    functions in the standard library, it's worth checking the declarations
  207. X    there.
  208. X
  209. X6.  If you want to change the high score list behavior, examine the top of
  210. X    topten.c, in the src directory.  You may want to change the definitions of
  211. X    PERSMAX, POINTSMIN, and ENTRYMAX.  I set POINTSMIN to 51 and ENTRYMAX to
  212. X    50 to keep the size of the score list down.
  213. X
  214. X7.  Go to the src directory and edit the top of your Makefile.  Be sure the
  215. X    directory you want the game installed in actually exists.
  216. X
  217. X    If you elected not to use the high-quality BSD random number routines by
  218. X    commenting out RANDOM in pcconf.h or tosconf.h, comment out (or set equal
  219. X    to nothing) the RANDOM macro in your Makefile.
  220. X
  221. X    If you elected to use Fred Fish's termcap library (bundled in as
  222. X    termcap.arc), you will have to generate termcap.lib from those sources
  223. X    (follow the comments therein, if you can).
  224. X
  225. X    If you're using Makefile.ovl and you have Microsoft's Macro Assembler
  226. X    version 5.1, you may want to enable the option in the make file to rebuild
  227. X    ovlmgr.obj, altho a ready-made object file is provided for those of you
  228. X    without.
  229. X
  230. X    If you are recompiling after patching your sources, or if you got your
  231. X    files from somewhere other than the official distribution, "touch
  232. X    makedefs.c" to ensure that certain files (onames.h and pm.h) are remade,
  233. X    lest potentially troublesome timestamps fool "make".
  234. X
  235. X8.  Now, enter "make all", and take a long siesta; your computer will be
  236. X    occupied for a long time.  If all goes well, you will get an executable.
  237. X    If you tried to compile in too many features, you will probably get a
  238. X    dysfunctional executable, and will have to start over.
  239. X
  240. X    Hint:  If you're short on memory, you might enter "make -n all
  241. X    >script.bat", and then in DOS enter "script", or in TOS use the Gulam
  242. X    command "source script.bat".  GCC users will be short on memory if
  243. X    they only have 2 megabytes.
  244. X
  245. X9.  Make sure the support files-- data, rumors, cmdhelp, opthelp, help, hh,
  246. X    history, license, and oracles (if ORACLES was #define'd)-- were copied
  247. X    to the game directory.  If not, move them there from the auxil directory
  248. X    yourself.  rumors can be created manually by entering "makedefs -r";
  249. X    data by entering "makedefs -d".
  250. X
  251. X    If you compiled in the compiled levels (if STRONGHOLD was #define'd), make
  252. X    sure castle, tower?, and possibly endgame are there, too.  They can be
  253. X    created manually by entering "lev_comp filename.des", where filename.des
  254. X    is the appropriate description file (found in the auxil directory).
  255. X
  256. X10. Go to the others directory.  Copy NetHack.cnf, or Atari.cnf for TOS, to
  257. X    your game directory as "NetHack.cnf".  Edit it to reflect your particular
  258. X    setup and personal preferences, following the comments.
  259. X
  260. X    If you compiled in the TERMLIB feature, also move the "termcap" file to
  261. X    your game directory.  (Note:  GCC's termcap routines have built-in
  262. X    defaults, so the termcap file is not necessary with that compiler.)
  263. X
  264. X    To use funky graphics charaters in TOS, uudecode "atarifnt.uue" and unarc
  265. X    the resulting "atarifnt.arc".  This contains a program to run that makes
  266. X    some line graphics characters available to NetHack.  To use them, uncomment
  267. X    the appropriate line in your NetHack.cnf file.
  268. X
  269. X    If you'll be running NetHack from a different subdirectory, you will
  270. X    want to "set HACKDIR=\games\nethack" (or whatever directory you want to
  271. X    use) now.  Add it to your autoexec.bat (in DOS), if you'll be playing
  272. X    often.
  273. X
  274. X11. Play NetHack.  If it works, you're done!
  275. X
  276. X
  277. XNotes
  278. X-----
  279. X
  280. X1)  Save files and bones files from previous versions will not work with
  281. X    NetHack 3.0.  Don't bother trying to keep them.  The record (score list)
  282. X    file will work fine, but I recommend you delete it and create a new, empty
  283. X    one.  Achieving the same scores in this version is a great deal harder.
  284. X
  285. X2)  To install an update of NetHack after changing something, enter "make"
  286. X    from the src directory.  If you add, delete, or reorder monsters or
  287. X    objects, or you change the format of saved level files, delete any save
  288. X    and bones files.  (Trying to use such files sometimes produces amusing
  289. X    confusions on the game's part, but usually crashes.)
  290. X
  291. X3)  While making the PC and OS/2 versions, during linking the Microsoft
  292. X    Overlay Linker will need temporary storage space.  Make sure you have
  293. X    about a meg of free disk whereever you have defined your temporary
  294. X    storage.
  295. X
  296. X4)  About overlays:
  297. X
  298. X    First and foremost:  We have been developing with MSC 5.1 as a compiler
  299. X    and NDmake 4.5 as a make.  NDmake is readily available on the Usenet,
  300. X    obtaining MSC might be more of a problem.  MSC 5.0 is broken.  You *will
  301. X    not* be able to compile the overlay version with that compiler due to
  302. X    problems with the /Gt option allowing the CONST segement to become
  303. X    > 64k when linking.
  304. X
  305. X    Anyone who uses Turbo C is free to try to compile the game.  Not only does
  306. X    TLINK not do overlays, it chokes on huge projects, so you will need to use
  307. X    some other linker, probably the Microsoft Overlay Linker.  Also,
  308. X    you will more than likely have to find a way to tell the compiler to
  309. X    keep most of your data out of the default data segment (whence the mystic
  310. X    /Gt24 for MSC in Makefile.ovl).  Certain other problems can probably be
  311. X    anticipated.  Feel free to try other compilers and linkers and please do
  312. X    inform us if you succeed.
  313. X
  314. X    If you use the custom overlay manager, ovlmgr.asm, you will want to use
  315. X    Makefile.ovl.  Otherwise you will have to roll your own make file;
  316. X    Makefile.ovl may serve you as a stylistic guide, but ovlmgr's optimisation
  317. X    characteristics are very different from those of (for example) the
  318. X    standard Microsoft Overlay Manager:  you will find the actual partitioning
  319. X    of the overlays entirely inappropriate to a more conventional system.
  320. X
  321. X    To make the game, follow the instructions above for arrangement of files
  322. X    from the others directory to src.  If you are using the standard Microsoft
  323. X    Overlay Linker (which we have been assuming you are) you should make doubly
  324. X    certain that OVERLAY is defined in pcconf.h, since otherwise things will
  325. X    compile properly but very ugly things are likely to happen wherever
  326. X    function pointers cross overlay boundaries - the linker is a little thick
  327. X    about that.  Now check the variables at the top of the  makefile for
  328. X    correctness on your system.  Once you have the compiler, linker, source
  329. X    files moved, and the include files configured, go to the src directory and
  330. X    type "make install".
  331. X
  332. X    The versions of the software we used are:
  333. X
  334. X    MS Overlay Linker      3.65
  335. X    MSC             5.1
  336. X    MASM            5.1
  337. X
  338. X    NDMake                  4.5
  339. X
  340. X    On a 286 10MHz PC you will have nethack in about 2 - 2.5 hours.
  341. X    Hope you enjoy the game.  We have worked very hard to try to bring it back
  342. X    to the PC.
  343. END_OF_FILE
  344. if test 13554 -ne `wc -c <'Install.dos'`; then
  345.     echo shar: \"'Install.dos'\" unpacked with wrong size!
  346. fi
  347. # end of 'Install.dos'
  348. if test -f 'src/monst.c2' -a "${1}" != "-c" ; then 
  349.   echo shar: clobbering existing file \"'src/monst.c2'\"
  350. fi
  351. echo shar: Extracting \"'src/monst.c2'\" \(45809 characters\)
  352. sed "s/^X//" >'src/monst.c2' <<'END_OF_FILE'
  353. X
  354. X/* horrible kludge alert: splitting monst.o into two parts depends on
  355. X   the two files monst1.o and monst2.o being loaded consecutively into
  356. X   memory; _mons2 must immediately follow mons. Needless to say,
  357. X   don't depend on this unless you have to (I had to; my compiler was
  358. X   too much of a memory pig to produce monst.o in a measly 2 megabytes
  359. X   of memory -- ERS */
  360. X
  361. X#ifndef SPLITMON_1
  362. X#ifdef SPLITMON_2
  363. Xstruct permonst _mons2[] = {
  364. X#endif
  365. X/*    giant Humanoids */
  366. X    { "ettin", S_GIANT, 10, 12, 3, 0, 0, (G_GENO | 1),
  367. X      { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  368. X        NO_ATTK, NO_ATTK, NO_ATTK },
  369. X      50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
  370. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  371. X    { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1),
  372. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  373. X      75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  374. X       M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(HI_MON) },
  375. X    { "stone giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1),
  376. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  377. X      75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  378. X       M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(GRAY) },
  379. X    { "hill giant", S_GIANT, 8, 10, 6, 0, -2, (G_GENO | G_SGROUP | 1),
  380. X      { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  381. X      70, 700, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  382. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(BROWN) },
  383. X    { "fire giant", S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1),
  384. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  385. X      75, 750, 0, MS_SILENT, MZ_HUGE,
  386. X      M1_HUMANOID | M1_FIRE_RES | M1_COLLECT | M1_JEWELS,
  387. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(YELLOW) },
  388. X    { "frost giant", S_GIANT, 10, 12, 3, 10, -3, (G_GENO | G_SGROUP | 1),
  389. X      { { AT_WEAP, AD_PHYS, 2, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  390. X      75, 750, 0, MS_SILENT, MZ_HUGE,
  391. X      M1_HUMANOID | M1_COLD_RES | M1_COLLECT | M1_JEWELS,
  392. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(WHITE) },
  393. X    { "titan", S_GIANT, 16, 18, -3, 70, 9, 1,
  394. X      { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_MAGC, AD_SPEL, 0, 0 },
  395. X        NO_ATTK, NO_ATTK, NO_ATTK },
  396. X      90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC |
  397. X      M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
  398. X    { "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
  399. X      { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
  400. X        { AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK},
  401. X      70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  402. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  403. X    { "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3),
  404. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  405. X        { AT_HUGS, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK },
  406. X      70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  407. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  408. X/*    Invisible stalker    */
  409. X    { "stalker", S_STALKER, 8, 12, 3, 0, 0, (G_GENO | 3),
  410. X      { { AT_CLAW, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  411. X      40, 400, 0, MS_SILENT, MZ_LARGE,
  412. X      M1_ANIMAL | M1_FLY | M1_SEE_INVIS | M1_STALK,
  413. X      M2_WANDER | M2_HOSTILE | M2_STRONG, C(WHITE) },
  414. X/*    Jabberwock */
  415. X    { "jabberwock", S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO | 1),
  416. X      { { AT_BITE, AD_PHYS, 2, 10 }, { AT_BITE, AD_PHYS, 2, 10 },
  417. X        { AT_CLAW, AD_PHYS, 2, 10 }, { AT_CLAW, AD_PHYS, 2, 10 }, NO_ATTK },
  418. X      60, 600, 0, MS_BURBLE, MZ_LARGE, M1_ANIMAL | M1_COLLECT | M1_FLY,
  419. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BRIGHT|RED) },
  420. X/*    Kops    */
  421. X#ifdef KOPS
  422. X    { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
  423. X      { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  424. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  425. X      M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) },
  426. X    { "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN),
  427. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  428. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  429. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
  430. X    { "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN),
  431. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  432. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  433. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
  434. X    { "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN),
  435. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  436. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  437. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
  438. X#endif
  439. X/*    Liches     */
  440. X    { "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1),
  441. X      { { AT_TUCH, AD_COLD, 1, 10 }, { AT_MAGC, AD_SPEL, 0, 0 },
  442. X        NO_ATTK, NO_ATTK, NO_ATTK },
  443. X      30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  444. X      M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) },
  445. X    { "demilich", S_LICH, 14, 9, -2, 60, -12, (G_GENO | 1),
  446. X      { { AT_TUCH, AD_COLD, 3, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  447. X        NO_ATTK, NO_ATTK, NO_ATTK },
  448. X      30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  449. X      M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) },
  450. X    { "master lich", S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | 1),
  451. X      { { AT_TUCH, AD_COLD, 3, 6 }, { AT_MAGC, AD_SPEL, 0, 0 },
  452. X        NO_ATTK, NO_ATTK, NO_ATTK },
  453. X      30, 100, 0, MS_MUMBLE, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  454. X      M1_FIRE_RES | M1_COLD_RES | M1_REGEN, M2_HOSTILE, C(BROWN) },
  455. X/*    Mummies     */
  456. X    { "kobold mummy", S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1),
  457. X      { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  458. X      10, 100, 0, MS_SILENT, MZ_SMALL,
  459. X      M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) },
  460. X    { "gnome mummy", S_MUMMY, 4, 10, 6, 20, -3, (G_GENO | G_NOCORPSE | 1),
  461. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  462. X      10, 100, 0, MS_SILENT, MZ_SMALL,
  463. X      M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) },
  464. X    { "orc mummy", S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1),
  465. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  466. X      15, 150, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  467. X      M1_GREEDY | M1_JEWELS, M2_HOSTILE | M2_ORC, C(BROWN) },
  468. X    { "elf mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
  469. X      { { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  470. X      35, 350, 0, MS_SILENT, MZ_HUMAN,
  471. X      M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_SLEE_RES,
  472. X      M2_HOSTILE | M2_ELF, C(BROWN) },
  473. X    { "human mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
  474. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  475. X        NO_ATTK, NO_ATTK, NO_ATTK },
  476. X      40, 400, 0, MS_SILENT, MZ_HUMAN,
  477. X      M1_HUMANOID | M1_UNDEAD | M1_POIS, M2_HOSTILE, C(BROWN) },
  478. X    { "ettin mummy", S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1),
  479. X      { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 },
  480. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
  481. X      M1_HUMANOID | M1_UNDEAD | M1_POIS,
  482. X      M2_HOSTILE | M2_STRONG, C(BROWN) },
  483. X    { "giant mummy", S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1),
  484. X      { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  485. X        NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
  486. X      M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_JEWELS,
  487. X      M2_HOSTILE | M2_GIANT | M2_STRONG, C(BROWN) },
  488. X/*    Nagas    */
  489. X    { "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  490. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  491. X      20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES |
  492. X      M1_FIRE_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(RED) },
  493. X    { "black naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  494. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  495. X      20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES |
  496. X      M1_STON_RES, M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(BLACK) },
  497. X    { "golden naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  498. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  499. X      20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES, M2_STRONG |
  500. X      M2_NOLIMBS | M2_THICK_HIDE, C(HI_GOLD) },
  501. X    { "guardian naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  502. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  503. X      20, 100, 0, MS_MUMBLE, MZ_LARGE, M1_NOHANDS | M1_POIS_RES, M2_STRONG |
  504. X      M2_NOLIMBS | M2_THICK_HIDE, C(GREEN) },
  505. X    { "red naga", S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1),
  506. X      { { AT_BITE, AD_PHYS, 2, 4 }, { AT_BREA, AD_FIRE, 2, 6 },
  507. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  508. X      M1_NOHANDS | M1_EGGS | M1_POIS_RES | M1_FIRE_RES,
  509. X      M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(RED) },
  510. X    { "black naga", S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1),
  511. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_SPIT, AD_ACID, 0, 0 },
  512. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  513. X      M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES | M1_STON_RES,
  514. X      M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(BLACK) },
  515. X    { "golden naga", S_NAGA, 10, 14, 2, 70, 5, (G_GENO | 1),
  516. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_MAGC, AD_SPEL, 4, 6 },
  517. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  518. X      M1_NOHANDS | M1_EGGS | M1_POIS_RES,
  519. X      M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(HI_GOLD) },
  520. X    { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1),
  521. X      { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 },
  522. X        { AT_SPIT, AD_ACID, 1, 6 }, NO_ATTK, NO_ATTK },
  523. X      60, 400, 0, MS_MUMBLE, MZ_HUGE, M1_NOHANDS | M1_EGGS | M1_POIS_RES,
  524. X      M2_STRONG | M2_NOLIMBS | M2_THICK_HIDE, C(GREEN) },
  525. X/*    Ogres    */
  526. X    { "ogre", S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP | G_GENO | 1),
  527. X      { { AT_WEAP, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  528. X      60, 500, 0, MS_GRUNT, MZ_LARGE,
  529. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  530. X      M2_STRONG, C(BROWN) },
  531. X    { "ogre lord", S_OGRE, 7, 12, 3, 30, -5, (G_GENO | 2),
  532. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  533. X      70, 700, 0, MS_GRUNT, MZ_LARGE,
  534. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_LORD,
  535. X      M2_STRONG, C(BROWN) },
  536. X    { "ogre king", S_OGRE, 7, 14, 4, 60, -7, (G_GENO | 2),
  537. X      { { AT_WEAP, AD_PHYS, 3, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  538. X      70, 750, 0, MS_GRUNT, MZ_LARGE,
  539. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT | M1_PRINCE,
  540. X      M2_STRONG, C(HI_LORD) },
  541. X/*    Puddings */
  542. X    { "gray ooze", S_PUDDING, 3, 1, 8, 0, 0, (G_GENO | 2),
  543. X      { { AT_BITE, AD_RUST, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  544. X      50, 500, 0, MS_SILENT, MZ_MEDIUM,
  545. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES,
  546. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(GRAY) },
  547. X    { "brown pudding", S_PUDDING, 5, 3, 8, 0, 0, (G_GENO | 1),
  548. X      { { AT_BITE, AD_DCAY, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  549. X      50, 500, 0, MS_SILENT, MZ_MEDIUM,
  550. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES | M1_ELEC_RES,
  551. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BROWN) },
  552. X    { "black pudding", S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1),
  553. X      { { AT_BITE, AD_RUST, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  554. X      50, 500, 0, MS_SILENT, MZ_LARGE,
  555. X      M1_NOEYES | M1_NOHANDS | M1_POIS_RES | M1_COLD_RES | M1_ELEC_RES,
  556. X      M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BLACK) },
  557. X/*    Quantum Mechanics    */
  558. X    { "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3),
  559. X      { { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  560. X      2, 20, 0, MS_SILENT, MZ_HUMAN, M1_ANIMAL | M1_HUMANOID | M1_POIS,
  561. X      M2_HOSTILE, C(CYAN) },
  562. X    { "mad scientist", S_QUANTMECH, 8, 12, 2, 20, 0, (G_GENO | 2),
  563. X      { { AT_WEAP, AD_SLEE, 1, 8 }, { AT_CLAW, AD_DREN, 0, 0 },
  564. X        NO_ATTK, NO_ATTK, NO_ATTK },
  565. X      35, 200, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_POIS | M1_COLLECT,
  566. X      M2_HOSTILE, C(MAGENTA) },
  567. X/*    Rust Monster    */
  568. X    { "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2),
  569. X      { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 }, NO_ATTK,
  570. X        NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_MEDIUM,
  571. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE, C(BROWN) },
  572. X/*    Snakes    */
  573. X    { "garter snake", S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1),
  574. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  575. X      5, 60, 0, MS_HISS, MZ_TINY,
  576. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS,
  577. X      M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  578. X    { "snake", S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | 2),
  579. X      { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  580. X      10, 80, 0, MS_HISS, MZ_SMALL, M1_SWIM | M1_ANIMAL | M1_NOHANDS |
  581. X      M1_EGGS | M1_POIS | M1_POIS_RES,
  582. X      M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  583. X    { "water moccasin", S_SNAKE, 4, 15, 3, 0, 0,
  584. X      (G_GENO | G_NOGEN | G_LGROUP),
  585. X      { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  586. X      10, 100, 0, MS_HISS, MZ_SMALL, M1_SWIM | M1_ANIMAL | M1_NOHANDS |
  587. X      M1_EGGS | M1_POIS | M1_POIS_RES, M2_HOSTILE | M2_CONCEAL |
  588. X      M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  589. X    { "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1),
  590. X      { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
  591. X        NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
  592. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
  593. X      M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  594. X    { "cobra", S_SNAKE, 6, 18, 2, 0, 0, (G_GENO | 1),
  595. X      { { AT_BITE, AD_DRST, 2, 4 }, { AT_SPIT, AD_BLND, 0, 0 },
  596. X        NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_MEDIUM,
  597. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
  598. X      M2_HOSTILE | M2_CONCEAL | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  599. X    { "python", S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1),
  600. X      { { AT_BITE, AD_DRST, 1, 4 }, { AT_HUGS, AD_WRAP, 2, 4 },
  601. X        NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_LARGE,
  602. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_EGGS | M1_POIS | M1_POIS_RES,
  603. X      M2_HOSTILE | M2_STRONG | M2_NOLIMBS | M2_CARNIVORE, C(GREEN) },
  604. X/*    Trolls    */
  605. X    { "troll", S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2),
  606. X      { { AT_CLAW, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 4, 2 },
  607. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  608. X      40, 400, 0, MS_GRUNT, MZ_LARGE, M1_HUMANOID | M1_REGEN | M1_STALK,
  609. X      M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) },
  610. X    { "ice troll", S_TROLL, 9, 10, 2, 20, -3, (G_GENO | 1),
  611. X      { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_COLD, 2, 6 },
  612. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  613. X      40, 300, 0, MS_GRUNT, MZ_LARGE,
  614. X      M1_HUMANOID | M1_COLD_RES | M1_REGEN | M1_STALK,
  615. X      M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(WHITE) },
  616. X    { "rock troll", S_TROLL, 9, 12, 0, 0, -3, (G_GENO | 1),
  617. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  618. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  619. X      40, 300, 0, MS_GRUNT, MZ_LARGE,
  620. X      M1_HUMANOID | M1_REGEN | M1_STALK | M1_COLLECT,
  621. X      M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) },
  622. X    { "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO),
  623. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  624. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  625. X      40, 400, 0, MS_GRUNT, MZ_LARGE,
  626. X      M1_SWIM | M1_HUMANOID | M1_REGEN | M1_STALK,
  627. X      M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BLUE) },
  628. X#ifdef TOLKIEN
  629. X    { "Olog-hai", S_TROLL, 13, 12, -4, 0, -7, (G_GENO | 1),
  630. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  631. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  632. X      40, 400, 0, MS_GRUNT, MZ_LARGE,
  633. X      M1_HUMANOID | M1_REGEN | M1_STALK | M1_COLLECT,
  634. X      M2_STRONG | M2_CARNIVORE | M2_HOSTILE, C(BROWN) },
  635. X#endif
  636. X/*    Umber Hulk    */
  637. X    { "umber hulk", S_UMBER, 9, 6, 2, 25, 0, (G_GENO | 2),
  638. X      { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  639. X        { AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK },
  640. X      50, 500, 0, MS_SILENT, MZ_LARGE,
  641. X      0, M2_STRONG | M2_TUNNEL | M2_CARNIVORE, C(BROWN)},
  642. X/*    Vampires    */
  643. X    { "vampire", S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | 1),
  644. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
  645. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
  646. X      M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_REGEN | M1_STALK,
  647. X      M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_MON) },
  648. X    { "vampire lord", S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | 1),
  649. X      { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_BITE, AD_DRLI, 1, 8 },
  650. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
  651. X      M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS | M1_REGEN |
  652. X      M1_STALK | M1_LORD, M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_MON) },
  653. X    { "Vlad the Impaler", S_VAMPIRE, 14, 18, -3, 80, -10,
  654. X      (G_NOGEN | G_NOCORPSE | G_UNIQ),
  655. X      { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
  656. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, PL_NSIZ, MS_VAMPIRE, MZ_HUMAN,
  657. X      M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS |
  658. X      M1_REGEN | M1_STALK | M1_PRINCE,
  659. X      M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, C(HI_LORD) },
  660. X/*    Wraiths     */
  661. X    { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1),
  662. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  663. X        { AT_WEAP, AD_DRLI, 0, 0 }, NO_ATTK, NO_ATTK },
  664. X      30, 0, 0, MS_SILENT, MZ_HUMAN,
  665. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_COLLECT,
  666. X      M2_HOSTILE, C(GRAY) },
  667. X    { "wraith", S_WRAITH, 6, 12, 4, 15, -6, (G_GENO | 2),
  668. X      { { AT_TUCH, AD_DRLI, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  669. X          30, 0, 0, MS_SILENT, MZ_HUMAN,
  670. X      M1_FLY | M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK,
  671. X      M2_HOSTILE, C(BLACK) },
  672. X#ifdef TOLKIEN
  673. X    { "Nazgul", S_WRAITH, 13, 12, 0, 25, -17, (G_GENO | G_NOCORPSE | 1),
  674. X      { { AT_WEAP, AD_DRLI, 1, 4 }, { AT_BREA, AD_SLEE, 0, 0 },
  675. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 0, 0, MS_SILENT, MZ_HUMAN,
  676. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_COLLECT,
  677. X      M2_STRONG | M2_HOSTILE, C(BLACK) },
  678. X#endif
  679. X/*    Xorn    */
  680. X    { "xorn", S_XORN, 8, 9,-2, 20, 0, (G_GENO | 1),
  681. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  682. X        { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 4, 6 },
  683. X        NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_MEDIUM,
  684. X      M1_WALLWALK | M1_FIRE_RES | M1_COLD_RES | M1_STON_RES,
  685. X      M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(BROWN) },
  686. X/*    Yeti    */
  687. X    { "yeti", S_YETI, 5, 15, 6, 0, 0, (G_GENO | 2),
  688. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  689. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  690. X      70, 700, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_COLD_RES,
  691. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
  692. X/*    Zombies     */
  693. X    { "kobold zombie", S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
  694. X      { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  695. X      10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  696. X      M1_POIS_RES | M1_STALK, M2_HOSTILE, C(BROWN) },
  697. X    { "gnome zombie", S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
  698. X      { { AT_CLAW, AD_PHYS, 1, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  699. X      10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_UNDEAD | M1_POIS |
  700. X      M1_POIS_RES | M1_STALK, M2_HOSTILE, C(HI_MON) },
  701. X    { "orc zombie", S_ZOMBIE, 2, 6, 9, 0, -3,
  702. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  703. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  704. X      15, 150, 0, MS_SILENT, MZ_HUMAN,
  705. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_GREEDY |
  706. X      M1_JEWELS, M2_HOSTILE | M2_ORC, C(BROWN) },
  707. X    { "elf zombie", S_ZOMBIE, 3, 6, 9, 0, -3,
  708. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  709. X      { { AT_CLAW, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  710. X      35, 350, 0, MS_SILENT, MZ_HUMAN,
  711. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_SLEE_RES,
  712. X      M2_HOSTILE | M2_ELF, C(HI_MON) },
  713. X    { "human zombie", S_ZOMBIE, 4, 6, 8, 0, -3,
  714. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  715. X      { { AT_CLAW, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  716. X      40, 400, 0, MS_SILENT, MZ_HUMAN,
  717. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK,
  718. X      M2_HOSTILE, C(HI_MON) },
  719. X    { "ettin zombie", S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
  720. X      { { AT_CLAW, AD_PHYS, 1, 10 }, { AT_CLAW, AD_PHYS, 1, 10 },
  721. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
  722. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK,
  723. X      M2_HOSTILE | M2_STRONG, C(BROWN) },
  724. X    { "giant zombie", S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
  725. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  726. X        NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
  727. X      M1_HUMANOID | M1_UNDEAD | M1_POIS_RES | M1_STALK | M1_JEWELS,
  728. X      M2_HOSTILE | M2_GIANT | M2_STRONG, C(HI_MON) },
  729. X/*    Golems    */
  730. X#ifdef GOLEMS
  731. X    { "straw golem", S_GOLEM, 3, 12, 10, 0, 0, (G_GENO | G_NOCORPSE | 1),
  732. X      { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
  733. X        NO_ATTK, NO_ATTK, NO_ATTK }, 10, 0, 0, MS_SILENT, MZ_LARGE,
  734. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
  735. X    { "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1),
  736. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_HUGS, AD_PHYS, 6, 1 },
  737. X        NO_ATTK, NO_ATTK, NO_ATTK }, 20, 0, 0, MS_SILENT, MZ_LARGE,
  738. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(BROWN) },
  739. X    { "leather golem", S_GOLEM, 6, 6, 6, 0, 0, (G_GENO | G_NOCORPSE | 1),
  740. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  741. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 0, 0, MS_SILENT, MZ_LARGE,
  742. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(HI_LEATHER) },
  743. X    { "wood golem", S_GOLEM, 7, 3, 4, 0, 0, (G_GENO | G_NOCORPSE | 1),
  744. X      { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  745. X      50, 0, 0, MS_SILENT, MZ_LARGE,
  746. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE | M2_THICK_HIDE, C(HI_WOOD) },
  747. X    { "flesh golem", S_GOLEM, 9, 8, 9, 30, 0, (G_GENO | 1),
  748. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  749. X        NO_ATTK, NO_ATTK, NO_ATTK},
  750. X      60, 600, 0, MS_SILENT, MZ_LARGE,
  751. X      M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES,
  752. X      M2_HOSTILE | M2_STRONG, C(HI_MON) },
  753. X    { "clay golem", S_GOLEM, 11, 7, 7, 40, 0, (G_GENO | G_NOCORPSE | 1),
  754. X      { { AT_CLAW, AD_PHYS, 3, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  755. X      75, 0, 0, MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS_RES,
  756. X      M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(BROWN) },
  757. X    { "stone golem", S_GOLEM, 14, 6, 5, 50, 0, (G_GENO | G_NOCORPSE | 1),
  758. X      { { AT_CLAW, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  759. X      90, 0, 0, MS_SILENT, MZ_LARGE,
  760. X      M1_HUMANOID | M1_POIS_RES | M1_STON_RES,
  761. X      M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(GRAY) },
  762. X    { "iron golem", S_GOLEM, 18, 6, 3, 60, 0, (G_GENO | G_NOCORPSE | 1),
  763. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_BREA, AD_DRST, 4, 6 },
  764. X        NO_ATTK, NO_ATTK, NO_ATTK },
  765. X      100, 0, 0, MS_SILENT, MZ_LARGE,
  766. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES |
  767. X      M1_COLLECT, M2_HOSTILE | M2_STRONG | M2_THICK_HIDE, C(HI_METAL) },
  768. X#endif /* GOLEMS */
  769. X/*    Humans        */
  770. X    { "human", S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, /* for corpses */
  771. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  772. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID |
  773. X      M1_COLLECT, M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_MON) },
  774. X    { "wererat", S_HUMAN, 2, 12, 7, 10, -7, 1,
  775. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  776. X      45, 400, 0, MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE |
  777. X      M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) },
  778. X    { "werejackal", S_HUMAN, 2, 12, 7, 10, -7, 1,
  779. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  780. X      45, 400, 0, MS_BARK, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE |
  781. X      M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) },
  782. X    { "werewolf", S_HUMAN, 5, 12, 6, 20, -7, 1,
  783. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  784. X      45, 400, 0, MS_BARK, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_WERE |
  785. X      M1_POIS | M1_REGEN | M1_COLLECT, M2_HOSTILE | M2_HUMAN, C(HI_MON) },
  786. X#ifdef TOLKIEN
  787. X    { "Woodland-elf", S_HUMAN, 4, 12, 5, 10, 5, (G_GENO | G_SGROUP | 2),
  788. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  789. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  790. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) },
  791. X    { "Green-elf", S_HUMAN, 5, 12, 5, 10, 6, (G_GENO | G_SGROUP | 2),
  792. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  793. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  794. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) },
  795. X    { "Grey-elf", S_HUMAN, 6, 12, 5, 10, 7, (G_GENO | G_SGROUP | 2),
  796. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  797. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  798. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(HI_MON) },
  799. X#endif
  800. X    { "elf-lord", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2),
  801. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  802. X        NO_ATTK, NO_ATTK, NO_ATTK },
  803. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | M1_LORD |
  804. X      M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG, C(HI_MON) },
  805. X    { "Elvenking", S_HUMAN, 9, 12, 5, 25, 10, (G_GENO | 1),
  806. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4},
  807. X        NO_ATTK, NO_ATTK, NO_ATTK },
  808. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID | M1_PRINCE |
  809. X      M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG, C(HI_MON) },
  810. X    { "nurse", S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3),
  811. X      { { AT_CLAW, AD_HEAL, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  812. X      45, 400, 0, MS_NURSE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_POIS_RES,
  813. X      M2_HUMAN | M2_HOSTILE, C(HI_MON) },
  814. X    { "shopkeeper", S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN,
  815. X      { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, NO_ATTK,
  816. X        NO_ATTK, NO_ATTK }, 45, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN,
  817. X      M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT,
  818. X      M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_MON) },
  819. X    { "guard", S_HUMAN, 12, 12, -1, 40, 10, G_NOGEN,
  820. X      { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  821. X      45, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN,
  822. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  823. X      M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG, C(HI_MON) },
  824. X#ifdef ORACLE
  825. X    { "oracle", S_HUMAN, 12, 0, 0, 50, 0, G_NOGEN | G_UNIQ,
  826. X      { { AT_NONE, AD_MAGM, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  827. X      45, 400, 0, MS_ORACLE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_FEM,
  828. X      M2_HUMAN | M2_PEACEFUL, C(HI_MON) },
  829. X#endif
  830. X#if defined(ALTARS) && defined(THEOLOGY)
  831. X    { "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
  832. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
  833. X        { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
  834. X      45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
  835. X      M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT,
  836. X      M2_HUMAN | M2_PEACEFUL, C(BRIGHT|WHITE) },
  837. X    { "temple priestess", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
  838. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
  839. X        { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
  840. X      45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
  841. X      M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT | M1_FEM,
  842. X      M2_HUMAN | M2_PEACEFUL, C(BRIGHT|WHITE) },
  843. X#endif
  844. X#ifdef ARMY
  845. X    { "unarmored soldier", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN,
  846. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  847. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  848. X      M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT,
  849. X      M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) },
  850. X    { "soldier", S_HUMAN, 6, 4, 3, 0, -2, (G_SGROUP | G_GENO | 1),
  851. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  852. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  853. X      M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT,
  854. X      M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) },
  855. X    { "sergeant", S_HUMAN, 8, 4, 0, 5, -3, (G_SGROUP | G_GENO | 1),
  856. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  857. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  858. X      M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT,
  859. X      M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) },
  860. X    { "lieutenant", S_HUMAN, 10, 4, -2, 15, -4, (G_GENO | 1),
  861. X      { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_WEAP, AD_PHYS, 3, 4 },
  862. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  863. X      M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT,
  864. X      M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) },
  865. X    { "captain", S_HUMAN, 12, 4, -3, 15, -5, (G_GENO | 1),
  866. X      { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 },
  867. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  868. X      M1_NOPOLY | M1_HUMANOID | M1_STALK | M1_COLLECT,
  869. X      M2_HUMAN | M2_MERC | M2_HOSTILE | M2_STRONG, C(GREEN) },
  870. X#endif
  871. X#ifdef MEDUSA
  872. X    { "Medusa", S_HUMAN, 20, 12, 2, 50, -15, G_NOGEN | G_UNIQ,
  873. X      { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_GAZE, AD_STON, 0, 0 },
  874. X        { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK },
  875. X      45, 400, PL_NSIZ, MS_HISS, MZ_LARGE,
  876. X      M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_POIS_RES |
  877. X      M1_STON_RES | M1_FEM, M2_HOSTILE | M2_STRONG | M2_PNAME,
  878. X      C(BRIGHT|GREEN) },
  879. X#endif
  880. X    { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, -20, G_NOGEN,
  881. X      { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
  882. X        { AT_BITE, AD_CUSS, 0, 0 }, NO_ATTK, NO_ATTK }, 45, 400, PL_NSIZ,
  883. X      MS_CUSS, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS_RES |
  884. X      M1_FIRE_RES | M1_REGEN | M1_SEE_INVIS | M1_TPORT |
  885. X      M1_TPORT_CONTROL | M1_MAGIC | M1_PRINCE,
  886. X      M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY, C(HI_LORD)
  887. X      },
  888. X#ifdef CHARON
  889. X    { "Charon", S_HUMAN, 76, 18, -5, 120, 0,
  890. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  891. X      { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_TUCH, AD_PLYS, 1, 8 },
  892. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, PL_NSIZ, MS_FERRY, MZ_HUMAN,
  893. X      M1_NOPOLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES |
  894. X      M1_COLLECT, M2_HUMAN | M2_PEACEFUL, C(WHITE) },
  895. X#endif
  896. X/*    Ghost        */
  897. X    { "ghost", S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN),
  898. X      { { AT_TUCH, AD_PHYS, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  899. X      45, 0, PL_NSIZ, MS_SILENT, MZ_HUMAN,
  900. X      M1_NOPOLY | M1_FLY | M1_WALLWALK | M1_HUMANOID | M1_UNDEAD |
  901. X      M1_STALK | M1_POIS_RES, M2_HOSTILE, C(WHITE)},
  902. X/*    (major) Demons    */
  903. X    { "water demon", S_DEMON, 8, 12,-4, 30, -7, (G_NOCORPSE | G_NOGEN),
  904. X      { { AT_WEAP, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  905. X        { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK },
  906. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  907. X      M1_SWIM | M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT,
  908. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(BLUE) },
  909. X#ifndef INFERNO /* generic type */
  910. X    { "demon", S_DEMON, 10, 12,-4, 30, -7, (G_NOCORPSE | 3),
  911. X      { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  912. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  913. X      45, 450, 0, MS_JEER, MZ_HUMAN,
  914. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT,
  915. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  916. X#else    /* used in hell for bigger, badder demons! */
  917. X    /* standard demons & devils */
  918. X    { "horned devil", S_DEMON, 6, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2),
  919. X      { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  920. X        { AT_BITE, AD_PHYS, 2, 3 }, { AT_STNG, AD_PHYS, 1, 3 }, NO_ATTK },
  921. X      45, 450, 0, MS_SILENT, MZ_HUMAN, M1_POIS | M1_FIRE_RES | M1_STALK,
  922. X      M2_DEMON | M2_HOSTILE | M2_NASTY | M2_THICK_HIDE, C(RED) },
  923. X#ifdef SEDUCE
  924. X    { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  925. X      { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
  926. X        { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
  927. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  928. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK | M1_FEM,
  929. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  930. X    { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  931. X      { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
  932. X        { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
  933. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  934. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK,
  935. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  936. X#else
  937. X    { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  938. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  939. X        { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
  940. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  941. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK | M1_FEM,
  942. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  943. X    { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  944. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  945. X        { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
  946. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  947. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES | M1_STALK,
  948. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  949. X#endif
  950. X    { "erinyes", S_DEMON, 7, 12, 2, 30, 10,
  951. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  952. X      { { AT_WEAP, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  953. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  954. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT | M1_FEM,
  955. X      M2_DEMON | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
  956. X    { "marilith", S_DEMON, 7, 12, -6, 80, -12, (G_HELL | G_NOCORPSE | 1),
  957. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  958. X        { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  959. X        { AT_WEAP, AD_PHYS, 2, 4 }, }, 45, 450, 0, MS_SILENT, MZ_LARGE,
  960. X      M1_HUMANOID | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_STALK |
  961. X      M1_COLLECT | M1_FEM, M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  962. X    { "barbed devil", S_DEMON, 8, 12, 0, 35, 8,
  963. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  964. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  965. X        { AT_STNG, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK },
  966. X      45, 450, 0, MS_SILENT, MZ_HUMAN, M1_POIS | M1_FIRE_RES | M1_STALK,
  967. X      M2_DEMON | M2_HOSTILE | M2_NASTY | M2_THICK_HIDE, C(RED) },
  968. X    { "vrock", S_DEMON, 8, 12, 0, 50, -9,
  969. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  970. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  971. X        { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
  972. X        { AT_BITE, AD_PHYS, 1, 6 }, },
  973. X      45, 450, 0, MS_SILENT, MZ_LARGE, M1_POIS | M1_FIRE_RES | M1_STALK,
  974. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  975. X    { "hezrou", S_DEMON, 9, 6, -2, 55, -10,
  976. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  977. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  978. X        { AT_BITE, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK }, 45, 450, 0,
  979. X      MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK,
  980. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  981. X    { "bone devil", S_DEMON, 9, 15, -1, 40, -9,
  982. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  983. X      { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_STNG, AD_DRST, 2, 4 },
  984. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
  985. X      M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT,
  986. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(WHITE) },
  987. X    { "nalfeshnee", S_DEMON, 11, 9, -1, 65, -11, (G_HELL | G_NOCORPSE | 1),
  988. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  989. X        { AT_BITE, AD_PHYS, 2, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK },
  990. X      45, 450, 0, MS_SILENT, MZ_LARGE,
  991. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_STALK,
  992. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  993. X    { "ice devil", S_DEMON, 11, 6, -4, 55, -12, (G_HELL | G_NOCORPSE | 2),
  994. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  995. X        { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_COLD, 3, 4 }, NO_ATTK },
  996. X      45, 450, 0, MS_SILENT, MZ_LARGE,
  997. X      M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_STALK,
  998. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(WHITE) },
  999. X    { "pit fiend", S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2),
  1000. X      { { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 },
  1001. X        { AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK },
  1002. X      45, 450, 0, MS_GROWL, MZ_LARGE,
  1003. X      M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_STALK | M1_COLLECT,
  1004. X      M2_DEMON | M2_HOSTILE | M2_NASTY, C(RED) },
  1005. X    { "balrog", S_DEMON, 16, 5, -2, 75, -14, (G_HELL | G_NOCORPSE | 1),
  1006. X      { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  1007. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
  1008. X      M1_FLY | M1_SEE_INVIS | M1_COLLECT | M1_STALK | M1_POIS | M1_FIRE_RES,
  1009. X      M2_DEMON | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
  1010. X    /* Named demon lords & princes plus Arch-Devils */
  1011. X    { "Juiblex", S_DEMON, 50, 3, -7, 65, -15,
  1012. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1013. X      { { AT_ENGL, AD_DISE, 4, 10 }, { AT_SPIT, AD_ACID, 3, 6 },
  1014. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 250, PL_NSIZ, MS_GURGLE, MZ_LARGE,
  1015. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS |
  1016. X      M1_FIRE_RES | M1_STALK | M1_LORD,
  1017. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_AMORPHOUS,
  1018. X      C(BRIGHT|GREEN) },
  1019. X    { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15,
  1020. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1021. X      { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 },
  1022. X        { AT_WEAP, AD_PLYS, 1, 6 }, { AT_MAGC, AD_MAGM, 2, 6 }, NO_ATTK },
  1023. X      50, 500, PL_NSIZ, MS_ORC, MZ_LARGE,
  1024. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1025. X      M1_STALK | M1_COLLECT | M1_LORD,
  1026. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) },
  1027. X    { "Orcus", S_DEMON, 66, 9, -6, 85, -20,
  1028. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1029. X      { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_WEAP, AD_PHYS, 3, 6 },
  1030. X        { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  1031. X        { AT_STNG, AD_DRST, 2, 4 }, }, 50, 500, PL_NSIZ, MS_ORC, MZ_HUGE,
  1032. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1033. X      M1_STALK | M1_COLLECT | M1_PRINCE,
  1034. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) },
  1035. X    { "Geryon", S_DEMON, 72, 3, -3, 75, 15,
  1036. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1037. X      { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 },
  1038. X        { AT_STNG, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK },
  1039. X      50, 500, PL_NSIZ, MS_BRIBE, MZ_HUGE,
  1040. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1041. X      M1_STALK | M1_PRINCE,
  1042. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) },
  1043. X    { "Dispater", S_DEMON, 78, 15, -2, 80, 15,
  1044. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1045. X      { { AT_WEAP, AD_PHYS, 4, 6 }, { AT_MAGC, AD_SPEL, 6, 6 },
  1046. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_HUMAN,
  1047. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS |
  1048. X      M1_FIRE_RES | M1_STALK | M1_COLLECT | M1_PRINCE,
  1049. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) },
  1050. X    { "Baalzebub", S_DEMON, 89, 9, -5, 85, 20,
  1051. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1052. X      { { AT_BITE, AD_DRST, 2, 6 }, { AT_GAZE, AD_STUN, 2, 6 },
  1053. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_LARGE,
  1054. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1055. X      M1_STALK | M1_PRINCE, M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY,
  1056. X      C(HI_LORD)},
  1057. X    { "Asmodeus", S_DEMON, 105, 12, -7, 90, 20,
  1058. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1059. X      { { AT_CLAW, AD_PHYS, 4, 4 }, { AT_MAGC, AD_COLD, 6, 6 },
  1060. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, PL_NSIZ, MS_BRIBE, MZ_HUGE,
  1061. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS |
  1062. X      M1_FIRE_RES | M1_COLD_RES | M1_STALK | M1_PRINCE,
  1063. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY, C(HI_LORD) },
  1064. X    { "Demogorgon", S_DEMON, 106, 15, -8, 95, -20,
  1065. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1066. X      { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_STNG, AD_DRLI, 1, 4 },
  1067. X        { AT_CLAW, AD_DISE, 1, 6 }, { AT_CLAW, AD_DISE, 1, 6 },
  1068. X        NO_ATTK }, 50, 500, PL_NSIZ, MS_GROWL, MZ_HUGE,
  1069. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS |
  1070. X      M1_FIRE_RES | M1_STALK | M1_PRINCE,
  1071. X      M2_DEMON | M2_HOSTILE | M2_PNAME | M2_NASTY, C(HI_LORD) },
  1072. X#endif
  1073. X#ifdef MAIL
  1074. X    { "mail daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE),
  1075. X      { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0,
  1076. X      MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS |
  1077. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES |
  1078. X      M1_STALK, M2_PEACEFUL, C(BRIGHT|BLUE) },
  1079. X/* Neither rain nor sleet nor gloom of night shall stay this courier... */
  1080. X#endif
  1081. X    { "djinni", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
  1082. X      { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1083. X      40, 400, 0, MS_DJINNI, MZ_HUMAN,
  1084. X      M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_STALK | M1_COLLECT, 0,
  1085. X      C(YELLOW) },
  1086. X/*    sea monsters        */
  1087. X    { "giant eel", S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN),
  1088. X      { { AT_BITE, AD_PHYS, 3, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
  1089. X        NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
  1090. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS,
  1091. X      M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(CYAN) },
  1092. X    { "electric eel", S_EEL, 7, 10, -3, 0, 0, (G_GENO | G_NOGEN),
  1093. X      { { AT_BITE, AD_ELEC, 4, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
  1094. X      NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
  1095. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY | M1_EGGS | M1_ELEC_RES,
  1096. X      M2_HOSTILE | M2_NOLIMBS | M2_CARNIVORE, C(BLUE)},
  1097. X    { "kraken", S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN),
  1098. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  1099. X        { AT_HUGS, AD_WRAP, 2, 6 }, { AT_BITE, AD_PHYS, 5, 4 }, NO_ATTK },
  1100. X      100, 1000, 0, MS_SILENT, MZ_HUGE,
  1101. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
  1102. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
  1103. X/*    lizards        */
  1104. X    { "newt", S_LIZARD, 0, 6, 8, 0, 0, (G_GENO | 5),
  1105. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1106. X      2, 20, 0, MS_SILENT, MZ_TINY, M1_SWIM | M1_ANIMAL | M1_NOHANDS,
  1107. X      M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
  1108. X    { "gecko", S_LIZARD, 1, 6, 8, 0, 0, (G_GENO | 5),
  1109. X      { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1110. X      2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  1111. X      M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
  1112. X    { "iguana", S_LIZARD, 2, 6, 7, 0, 0, (G_GENO | 5),
  1113. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1114. X      3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  1115. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1116. X    { "lizard", S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 5),
  1117. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1118. X      1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  1119. X      M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
  1120. X    { "chameleon", S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2),
  1121. X      { { AT_BITE, AD_PHYS, 4, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1122. X      10, 100, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
  1123. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1124. X    { "crocodile", S_LIZARD, 6, 9, 5, 0, 0, (G_GENO | 1),
  1125. X      { { AT_BITE, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 1, 12 }, NO_ATTK,
  1126. X      NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SILENT, MZ_LARGE,
  1127. X      M1_ANIMAL | M1_NOHANDS | M1_SWIM,
  1128. X      M2_STRONG | M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1129. X
  1130. X/*    character classes */
  1131. X    { "archeologist", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1132. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1133. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1134. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1135. X      M2_HUMAN | M2_STRONG | M2_TUNNEL | M2_NEEDPICK, C(HI_MON) },
  1136. X    { "barbarian", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
  1137. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1138. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1139. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
  1140. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1141. X    { "caveman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1142. X      { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1143. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1144. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1145. X      M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(HI_MON) },
  1146. X    { "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1147. X      { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1148. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1149. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_FEM,
  1150. X      M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(HI_MON) },
  1151. X    /* Note: players who are elves still get normal carrying capacity,
  1152. X     * even though this is strictly speaking inconsistent.
  1153. X     */
  1154. X    { "elf", S_HUMAN, 1, 12, 10, 2, 3, G_NOGEN,
  1155. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1156. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN,
  1157. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_SLEE_RES | M1_SEE_INVIS,
  1158. X      M2_ELF | M2_STRONG, C(HI_MON) },
  1159. X    { "healer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1160. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1161. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1162. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
  1163. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1164. X    { "knight", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1165. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1166. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1167. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1168. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1169. X    { "priest", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
  1170. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1171. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1172. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1173. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1174. X    { "priestess", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
  1175. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1176. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1177. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_FEM,
  1178. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1179. X    { "rogue", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
  1180. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1181. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1182. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_GREEDY,
  1183. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1184. X    { "samurai", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1185. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1186. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1187. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1188. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1189. X    { "tourist", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN,
  1190. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1191. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1192. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1193. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1194. X    { "valkyrie", S_HUMAN, 1, 10, 10, 1, -1, G_NOGEN,
  1195. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1196. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1197. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_COLD_RES | M1_FEM,
  1198. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1199. X    { "wizard", S_HUMAN, 1, 10, 10, 3, 0, G_NOGEN,
  1200. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1201. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1202. X      M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT,
  1203. X      M2_HUMAN | M2_STRONG, C(HI_MON) },
  1204. X
  1205. X/*    ARRAY TERMINATOR    */
  1206. X    { "", 0, 0, 0, 0, 0, 0, 0,
  1207. X      { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1208. X      0, 0, 0, 0, 0, 0, 0, C(0) }
  1209. X};
  1210. X#endif /* !SPLITMON_1 */
  1211. X#endif /* !MAKEDEFS_C */
  1212. END_OF_FILE
  1213. if test 45809 -ne `wc -c <'src/monst.c2'`; then
  1214.     echo shar: \"'src/monst.c2'\" unpacked with wrong size!
  1215. fi
  1216. # end of 'src/monst.c2'
  1217. echo shar: End of archive 13 \(of 15\).
  1218. cp /dev/null ark13isdone
  1219. MISSING=""
  1220. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
  1221.     if test ! -f ark${I}isdone ; then
  1222.     MISSING="${MISSING} ${I}"
  1223.     fi
  1224. done
  1225. if test "${MISSING}" = "" ; then
  1226.     echo You have unpacked all 15 archives.
  1227.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1228. else
  1229.     echo You still need to unpack the following archives:
  1230.     echo "        " ${MISSING}
  1231. fi
  1232. ##  End of shell archive.
  1233. exit 0
  1234.